package pms.dao;

import java.util.ArrayList;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pms.om.Kategorie;
import pms.om.Musikstueck;
import pms.om.Noten;

public class MusikstueckDao extends HibernateDaoSupport{
	private NotenDao notenDao;
	private KategorieDao kategorieDao;

	/** Getter
	 * @return the notenDao
	 */
	public NotenDao getNotenDao() {
		return notenDao;
	}

	/** Setter
	 * @param notenDao the notenDao to set
	 */
	public void setNotenDao(NotenDao notenDao) {
		this.notenDao = notenDao;
	}

	/** Getter
	 * @return the kategorieDao
	 */
	public KategorieDao getKategorieDao() {
		return kategorieDao;
	}

	/** Setter
	 * @param kategorieDao the kategorieDao to set
	 */
	public void setKategorieDao(KategorieDao kategorieDao) {
		this.kategorieDao = kategorieDao;
	}

	/** findById
	 * @param id
	 * @return the Musikstueck
	 */
	public Musikstueck findById (int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Musikstueck) template.get(Musikstueck.class, id);
	}
	
	/** findNotenByMusikstueckId
	 * @param id
	 * @return the foundNoten
	 */
	@SuppressWarnings("unchecked")
	public List<Noten> findNotenByMusikstueckId(int id) {
		HibernateTemplate template = getHibernateTemplate();
		List<Noten> alleNoten = template.loadAll(Noten.class);
		List<Noten> foundNoten = new ArrayList<Noten>();
		for (Noten noten : alleNoten) {
			if (noten.getMusikstueck().getId() == id) {
				foundNoten.add(noten);
			}
		}
		return foundNoten;
	}
	
	/** findAll
	 * @return the results
	 */
	@SuppressWarnings("unchecked")
	public List<Musikstueck> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		List<Musikstueck> results = template.loadAll(Musikstueck.class);
		return results;
	}
	
	/** create
	 * @param titel
	 * @param untertitel
	 * @param komponist
	 * @param verlag
	 * @param kategorie
	 */
	public void create(String titel, String untertitel, String komponist, String verlag, Kategorie kategorie) {
		HibernateTemplate template = getHibernateTemplate();
		Musikstueck m = new Musikstueck(titel, untertitel, komponist, verlag, kategorie);
		template.persist(m);
	}
	
	/** modify
	 * @param id
	 * @param titel
	 * @param untertitel
	 * @param komponist
	 * @param verlag
	 * @param kategorie
	 */
	public void modify(int id, String titel, String untertitel, String komponist, String verlag, Kategorie kategorie) {
		HibernateTemplate template = getHibernateTemplate();
		Musikstueck m = (Musikstueck) template.get(Musikstueck.class, id);
		m.setTitel(titel);
		m.setUntertitel(untertitel);
		m.setKomponist(komponist);
		m.setVerlag(verlag);
		m.setKategorie(kategorie);
		template.saveOrUpdate(m);
	}
	
	/** deleteById
	 * @param id
	 * @throws Exception MusikstueckDeleteExeption
	 */
	public void deleteById(int id)throws Exception {
		HibernateTemplate template = getHibernateTemplate();
		Musikstueck m = findById(id);
		List<Noten> noten = findNotenByMusikstueckId(m.getId());
		if (noten == null || noten.size() == 0) {
			template.delete(m);
		} else {
			throw new MusikstueckDeleteExeption();
		}
		template.flush();
	}
}
